home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / c / amigacc68k.lha / cc68k / lib.s < prev    next >
Encoding:
Text File  |  1994-03-02  |  1.3 KB  |  79 lines

  1.  
  2.     OUTPUT    "lib.o"
  3.     OPTIMIZE
  4.     LINKABLE
  5.  
  6.      CODE    "TEXT"
  7.  
  8.  
  9. *
  10. *    _C_LMUL    LONG SIGNED MULTIPLY
  11. *
  12. *    MULTIPLIES TWO LONG OPERANDS ON THE STACK AND RETURNS THE
  13. *    RESULT ON THE STACK WITH NO GARBAGE.
  14. *
  15.  
  16.     XDEF    _C_LMUL
  17.  
  18. _C_LMUL:
  19.     MOVEM.L    D0-D3,-(A7)        *SAVE REGISTERS
  20.     MOVE.L    20(A7),D0        *GET PARAMETER 1
  21.     MOVE.W    D0,D2
  22.     MOVE.W    D0,D1
  23.     EXT.L    D1
  24.     SWAP    D1
  25.     SWAP    D0
  26.     SUB.W    D0,D1
  27.     MOVE.W    26(A7),D0        *GET MSW OF PARAMETER 2
  28.     MOVE.W    D0,D3
  29.     EXT.L    D3
  30.     SWAP    D3
  31.     SUB.L    24(A7),D3        *SUBTRACT LSW OF PARAMETER 2
  32.     MULS    D0,D1
  33.     MULS    D2,D3
  34.     ADD.W    D1,D3
  35.     MULS    D2,D0
  36.     SWAP    D0
  37.     SUB.W    D3,D0
  38.     SWAP    D0
  39.     MOVE.L    D0,24(A7)
  40.     MOVE.L    16(A7),20(A7)        *MOVEE RETURN ADDRESS
  41.     MOVEM.L    (A7)+,D0-D3        *RESTORE REGISTERS
  42.     ADD.W    #4,A7            *ADJUST STACK
  43.     RTS
  44.  
  45.  
  46.  
  47. *
  48. *    _C_SWITCH - EXECUTE C SWITCH STATEMENT
  49. *
  50. *    THE SWITCH TABLE IS ENCODED AS FOLLOWS:
  51. *
  52. *        LONG    LABEL1,CASE1
  53. *        LONG    LABEL2,CASE2
  54. *        LONG    LABEL3,CASE3
  55. *        ... FOR ALL CASES
  56. *        LONG    0,DEFAULTCASE
  57. *
  58. *    THE CASE VARIABLE IS PASSED IN D0
  59. *
  60.  
  61.     XDEF    _C_SWITCH
  62.  
  63. _C_SWITCH:
  64.     MOVE.L    (A7)+,A0        *GET TABLE ADDRESS
  65. _C_SW1:
  66.     MOVE.L    (A0)+,A1        *GET A LABEL
  67.     MOVE.L    A1,D1            *TEST IT FOR DEFAULT
  68.     BEQ.S    _C_SW2            *JUMP IF DEFAULT CASE
  69.     CMP.L    (A0)+,D0        *SEE IF THIS CASE
  70.     BNE    _C_SW1            *NEXT CASE IF NOT
  71.     JMP    (A1)            *JUMP TO CASE
  72. _C_SW2:
  73.         MOVE.L  (A0),A0 *GET DEFAULT ADDRESS.
  74.         JMP     (A0)    *JUMP TO DEFAULT CASE.
  75.  
  76.         END
  77.  
  78.  
  79.